﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics.Contracts;

namespace ControleFinanceiro.Dominio.Entidades
{
  public class Lancamento : Entidade
  {
    public Conta Conta { get; protected set; }
    public DateTime DataLancamento { get; set; }
    public double Valor { get; set; }
    public string Descricao { get; set; }
    public string Tipo { get; protected set; }

    public Lancamento(Entidades.Conta conta, string tipo)
    {
      Contract.Requires(!String.IsNullOrWhiteSpace(tipo));

      if (tipo != "C" && tipo != "D")
        throw new ArgumentException("Os valores permitidos são C ou D.");

      this.Tipo = tipo;
      this.Conta = conta;
    }

    public void Efetivar()
    {
      if (this.Conta == null)
        throw new ArgumentNullException("A conta não pode ser nula.", new Exception());

      switch (this.Tipo)
      {
        case "C":
          Conta.Creditar(this.Valor);
          break;
        case "D":
          Conta.Debitar(this.Valor);
          break;
      }
    }
  }
}
